一、UML概述
1、什么是UML
    统一建模语言（Unified Modeling Language）。用于说明、可视化、构建和编写一个正在开发的、面向对象的、软件密集系统的开发方法。
UML展现了一系列最佳工程实践，这些最佳实践在对大规模，复杂系统进行建模方面，特别是在软件架构层次已经被验证有效。
    项目开发的说明书（设计图）。
2、UML是做什么的
    帮助建立软件开发过程和各种模型
    主要目的是为了让开发者之间进行有效的交流。
        开发者与设计者之间的交流
        开发者与开发者之间的交流
        开发者与管理者之间的交流
    适合大型项目和大型团队的开发

3、UML的应用领域
    UML的目标是以面向对象的方式来描述任何类型的系统，常用于建立软件的模型。
4、我对UML的看法
    不建议用UML生成代码。
    没有完美的UML图，够用就行，图是死的，人是活的。
    UML主要功能是为了更好的让开发团队与用户之间进行沟通交流。
    先结对学习UML目的以应用、看懂为主(有利于后期工作)，以画图为辅。
    但需要长期学习，为后期成为系统分析师、架构师、产品经理、项目经理打下基础。

二、Rational Rose四种视图与UML的8中图形关系
    Rose启动后自动创建四种视图：
        用例视图： Use Case View
            帮助理解和使用系统，这种图展示了系统的参与者和用例是怎么相互作用的，包括了系统中的所有角色。
            用例图：Use Case Digram
            时序图：Sequence Digram
            协作图：Collaboration Digram
            活动图：Activity Digram
            这种视图的主要使用都是用户、分析人员、项目管理人员。
        逻辑视图： Logical View
            逻辑视图关注的是系统如何实现用例中提出的功能，它提供系统的详细图形，描述了组件间如何关联。
            类图：Call Digram
            状态图：Statechart Dirgam
            这种视图的主要使用者是开发人员，开发人员包括：程序员、需求分析师、测试工程师、项目经理。
        构件视图： Component View
            这种视图关注的是代码模板间的关系，通过组件视图可以知道哪些代码是组件，哪些是代码库，哪些是运行组件，会默认有一个
Component图表。
            这种视图的主要使用者是负责控制代码、编译、部署应用程序的人员。
        部署视图： Deployment View
            这种视图关注的是系统的实际部署，进程和设备间的实际连接。
            这种视图的使用者是用户和软件的发布人员。

三、用例图：详细表示所有的用例需求，不考虑细节
    1、用例图的作用
        主要用它来描述需求，画图时要从用户的角度出发，主要用于与用户之间的交流。
    2、用例图的要点
        正确反应用户的需求
        每个用例的内部实现
        细节不是本阶段要考虑的问题
    3、用例图包括
        参与者
        用例
        用例之间的关系
    4、如何确定参与者
        谁使用系统
        谁负责启动、关闭系统
        谁查询数据
        谁提供数据
        谁安装、升级系统
    5、什么是用例
        是系统的使用过程，一个用例就是一个功能需求。

四、类图：主要表示类与类之间的关系，不用详细考虑类的属性和方法
    1、类图的主要作用
        主要用来描述类的内部结构和类与类之间的关系。
        类图中不显示暂时性的消息，是面向对象剑魔时的主要组成部分。
    2、类图主要包括
        名称：类名
        属性：类的成员变量
            访问权限
            变量名
            类型
        操作：类的成员函数
            访问权限
            函数名
            参数名
            参数类型
            返回值类型
        职责：说明此类具体负责的任务，解决什么问题
    3、类之间的关系
        继承关系：空心箭头实线来表示继承关系，子类指向父类
            一个类Test继承Base类的属性和行为，并可以增加自己的属性和行为。
        实现关系：空心箭头虚线来表示继承关系，子类指向父类
            一个类Test继承一个抽象类，父类中的函数定义为纯虚函数，子类继承后覆盖所有纯虚函数。
        依赖关系：箭头和虚线来表示依赖关系，依赖者指向被依赖者
            一个类A中使用到类B（类A中的函数的参数或返回值类型是类B），这种关系是一种偶然、临时的，是一种非常弱的关系。
        关联关系：箭头和实线来表示关联关系，依赖者指向被依赖者
            是一种强依赖关系，类A的属性（成员变量）是类B。
        聚合关系：实心菱形和箭头实线来表示聚合关系，菱形指向整体，箭头指向部分。
            聚合关系是一种关联关系的特例，它体现的是整体与部分。
            整体与部分之间是可分离，它们可以具有各自的生命周期。
            从代码层面来讲与关联是一致的。
        组合关系：实心菱形和箭头实线来表示组合关系，菱形指向整体，箭头指向部分。
            组合关系也是一种聚合关系的特例，这种关系比聚合更强，也称为强聚合，同样也体现出整体与部分，但此时的整体与部分是
不可分隔的。
            从代码层面来讲与关联是一致的。
        从代码实现层面只有继承、包含、依赖。
    用例图和类表示对象之间消息的发送顺序，值考虑正确情况。

五、时序图：主要表示对象之间消息的发送顺序，只考虑正确情况。
    用来表示对象之间的关系，同时强调对象之间的交互。
    时序图向用户表示时间随着时间的推移，清晰的可视化轨迹。
    时序图用来表示项目中的某个操作中如何进行的，具体的步骤是什么。
    
六、状态图
    用来表示对象的状态变化，用于帮助开发人员理解系统中对象的行为。
    主要有状态，生命周期，条件，状态转换，事件和动作。

七、活动图
    活动图的本质就是流程图，它描述了系统的活动、判断点和分支。
    侧重于操作而不是对象，重点表示逻辑变化。
    一个动作的流程图一般包括起点、终点、操作。
    泳道：用于多种角色参与一个过程，一个活动只能属于一个泳道。

八、协作图
    主要用来描述对象之间的交互关系，强调参与交互的各对象的组织。
    需要按照组织对控制流程进行建模时选择画协作图。
    协作图与时序图的区别：
        时序图描述了交互过程中的时间顺序，但没有表达对象之间的关系。
        协作图描述了对象间的关系但时间顺序必须从时序图中获得。
    合格的协作图和时序图主义相同，可互换，而不丢失信息。